﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using PEMS.Common;

namespace PEMS.Server
{
    [Serializable]
    public class Felevek 
    {
        public SerializableDictionary<string, Felev> felevList { get; set; }

        public Felevek()
        {
            felevList = new SerializableDictionary<string, Felev>();
        }

        public SerializableDictionary<string, Felev> getFelevLista(bool aktualis)
        {
            SerializableDictionary<string, Felev> lista = new SerializableDictionary<string, Felev>();
            try
            {
                foreach (KeyValuePair<string, Felev> felev in felevList)
                {
                    if (aktualis)
                    {
                        if (felev.Value.aktualis)
                        {
                            lista.Add(felev.Value.id, felev.Value);
                        }
                    }
                    else
                    {
                        lista.Add(felev.Value.id, felev.Value);
                    }
                }
            }
            catch
            {
                return null;
            }
            return lista;
        }

        public Felev getFelev(string id)
        {
            try
            {
                if (felevList.ContainsKey(id))
                {
                    return felevList[id];
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("\nException in getFelev(): " + e.Message + "\n");
                return null;
            }
            return null;
        }

        public bool felevHozzaadasa(string id, string megnevezes, DateTime kezdoDatum, DateTime vegDatum)
        {
            bool felevDeaktivalva = true;
            bool felevHozzaadva = false;
            
            // a befejezett félévet deaktiválja
            if (felevList.Count > 0)
            {
                felevDeaktivalva = felevetDeaktival();
            }
            
            // új félév létrehozása
            Felev felev = new Felev(id, megnevezes, kezdoDatum, vegDatum);
            try
            {
                felevList.Add(felev.id, felev);
                felevHozzaadva = true;
            }
            catch
            {
                felevDeaktivalva = false;
            }
            return felevDeaktivalva & felevHozzaadva;
        }

        public string getAktualisFelev()
        {
            try
            {
                foreach (KeyValuePair<string, Felev> felev in felevList)
                {
                    if (felev.Value.aktualis)
                    {
                        return felev.Key;
                    }
                }
            }
            catch
            {
                return null;
            }
            return null;
        }

        private bool felevetAktival(string id)
        {
            Felev felev = getFelev(id);
            felev.aktualis = true;
            return false;
        }

        private bool felevetDeaktival()
        {
            bool deaktivalva = true;
            try
            {
                felevList[getAktualisFelev()].aktualis = false;
            }
            catch
            {
                deaktivalva = false;
            }
            return deaktivalva;
        }
        
    }
}
